#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
#define M 20

typedef enum tokentype 
{INTEIRO, REAL, BINARIO, SE, SENAO, ENQUANTO, PARAR, CONTINUAR, RETORNAR, LER, IMPRIMIR, SIM, NAO, E, OU}
TokenType; //No livro está deste jeito

typedef struct
{
	TokenType tokenval;
	char *stringval;
	int numval;
} TokenRecord;

typedef struct tokenode
{
	TokenRecord token;
	struct tokenode *prox;
}TokenNode;

typedef struct tokenlist
{
	TokenNode *Primeiro;
	int numTokens;
}TokenList;

int checarExtensaoValida(char *fName, char** argv);
TokenType getToken(char *Codigo);
TokenList *initList(void);
void addToken(TokenList *TL, TokenType TT, char *valor, int num);
void initCodeMatrix();
void imprimirMatriz();
char Code[N][M];
char palavrasChaves[10][11];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
int indiceAtual;

int main(int argc, char **argv)
{
	FILE *fp;
	int tamanho = (int)strlen(argv[1]);
	char *fName = (char*)malloc(sizeof(char)*tamanho);
	char Buffer[N];
	int i=0;
	indiceAtual = 0;
	//initCodeMatrix();
	if(argc != 2)
	{
		fprintf(stderr, "Numero invalido de argumentos. digite <out> Code.lambda\n");
	}
	strcpy(fName,argv[1]);
	//printf("A String que eu peguei foi: %s\n", fName);	
	
	if (!checarExtensaoValida(fName, argv))
	{
		printf("Extensao valida\n");
	}
	else { printf("Extensao invalida\n"); }
	
	if(!(fp = fopen(fName, "r"))) 
	{
		printf("Nao conseguiu abrir o arquivo\n");
	}
	 
	while(fscanf(fp, "%s", Buffer) ==1) //Buffer é o que ele carrega do arquivo texto, uma linha por vez
	{
		strcpy(Code[i],Buffer); //Aqui ele pega todo o conteudo do Buffer que foi coletado do arquivo texto e coloca na variavel
		i++;					//A Matriz de Strings Code contem as palavras chaves que iremos percorrer em todo o arquivo texto
	}
	//imprimirMatriz();
	
	strcpy(palavrasChaves[0], "INTEIRO\0");
	strcpy(palavrasChaves[1], "BINARIO\0");
	strcpy(palavrasChaves[2], "REAL\0");
	strcpy(palavrasChaves[3], "CARACTER\0");
	strcpy(palavrasChaves[4], "LER\0");
	strcpy(palavrasChaves[5], "IMPRIMIR\0");
	strcpy(palavrasChaves[6], "SE\0");
	strcpy(palavrasChaves[7], "SENAO\0");
	strcpy(palavrasChaves[8], "ENQUANTO");
	strcpy(palavrasChaves[9], "FIM");
	strcpy(palavrasChaves[10], "FUNCAO");
	
	fclose(fp);
	return 0;
}

int checarExtensaoValida(char *fName, char** argv) //Funcao buagada, consertar depois
{
	char *token = strtok(argv[1], ".\0");
	char *extensao = token;
	while(token != NULL)
	{
		extensao = token;
		token = strtok(NULL, ".\0");
	}
	printf("O que está em extensao: %s\n", extensao);
	// 
	//printf("%d\n", strcmp(extensao, "lamda")); //problema aqui: Strcmp esta retornando um valor menor que zero, isso significa que e o valor da string extensao é menor que lambda
	//printf("blablabla");
	return strcmp(extensao, "lamda");
}
/*
int verificarPalavraChave(char *Palavra)
{
	int i;
	for(i=0; i < M; i++)
	{
		if(!strcmp)
		  {
			  
		  }
	
	
	}
}
*/

/*
int verificarID(char *Palavra)
{
	if(Palavra[0] >= 97 && Palavra[0] <= 122) //Se a palavra começa com uma letra minuscula é um identificador* 
	 {
		for(i=1; i < M; i++)
		 {
				if((Palavra[i] >= 97 && Palavra[i] <= 122) && (Palavra[i] >= 48 && Palavra[i] <= 57))
				{
						//TODO: Tem que arranjar um jeito de saber que chegamos no fim da palavra
						//TODO2: Uma ideia seria criar uma função para calcular o tamanho da string sem os caracteres lixos
						* return 1;
				}
				else {  return 0; } 
		 }
	  }  
	return 0;
} 
*/

/*
int verificarNumero(char *Palavra)
{
	int estado = 1;
	int i = 0;
	while (i < tamanhoComando)
	{
		if ((Palavra[i] >=48 && Palavra[i] <= 57) && (estado == 1))
		{
			estado = 2;
			i++;
		}
		else if ((Palavra[i] == 45) && (estado == 1)) 
		{
			estado = 4;
			i++;
		}
		else if((Palavra[i] >=48 && Palavra[i] <= 57) && (estado == 3))
		{
			i++;
		}
		else if((Palavra[i] >=48 && Palavra[i] <= 57) && (estado == 4))
		{
			i++;
		}
		else if((Palavra[i] == 44) && (estado == 2))
		{
			estado = 3;
			i++;
		}
		else if((Palavra[i] == 44) && (estado == 4))
		{
			estado = 3;
			i++;
		}
		else { break;}
	}
	if(estado == 2 || estado == 3 || estado == 4)
	*{
		addToken();
		return 1;
	 }
	return 0; 
}
*/



TokenList *initList(void)
{
	TokenList *TL = (TokenList*)malloc(sizeof(TokenList));
	TL->Primeiro = NULL;
	return TL;
}

void addToken(TokenList *TL, TokenType TT, char *valor, int num) //Adiciona na lista encadeada de tokens
{
	TokenRecord *TR = (TokenRecord*)malloc(sizeof(TokenRecord));
	TR->tokenval = TT;
	TR->stringval = valor;
	TR->numval = num;
	TokenNode *TN = (TokenNode*)malloc(sizeof(TokenNode));
	TN->token = *TR;
	if(TL->Primeiro == NULL)
	{
		TL->Primeiro = TN;
		return;
	}
	TokenNode *Aux = TL->Primeiro;
	while(Aux->prox != NULL)
	{
		Aux = Aux->prox;
	}
	Aux->prox = TN;
}

/*
TokenType getToken(char *Codigo)
{
}
*/
void initCodeMatrix()
{
	int i;
	for(i=0; i < N; i++)
	{
		strcpy(Code[i],"\0");
	}
}

